package com.photo.commons;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.apache.commons.lang.StringUtils;
import org.springframework.core.io.Resource;

import java.sql.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Iterator;
import java.net.URLDecoder;
import java.net.URL;




/**
 * <p>Title: Just-a-second.com</p>
 * <p>Description: include public and admin website</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 *
 * @author luoheng
 * @version 1.0
 */
/*
* modify by luoxiaoqiang 2008-03-21
*
* */
public class DBConnect {
    private Connection conn = null;
    private Statement stmt = null;
    private PreparedStatement prepstmt = null;
    public static final Log log= LogFactory.getLog(DBConnect.class);
    void init() {
        //Connection conn = null;

        try {
            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
        }
        catch (ClassNotFoundException e) {
            log.debug("can not find db driver" + e);
        }

        String dataDriver = "com.mysql.jdbc.Driver";
        String dataURL = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String pwd = "";
        try {
            conn = DriverManager.getConnection("proxool.example:" + dataDriver + ":" + dataURL, user, pwd);
        } catch (SQLException e) {
            log.debug(e);
        }

    }
    public DBConnect() throws Exception {
        init();
        stmt = conn.createStatement();
    }

    public DBConnect(int resultSetType, int resultSetConcurrency)
            throws Exception {
        init();

        stmt = conn.createStatement(resultSetType, resultSetConcurrency);
    }

    /**
     * 构造数据库的连接和访问类
     * 预编译SQL语句
     *
     * @param sql SQL语句
     */
    public DBConnect(String sql) throws Exception {
         init();
        this.prepareStatement(sql);
    }

    public DBConnect(String sql, int resultSetType, int resultSetConcurrency)
            throws Exception {
         init();
        this.prepareStatement(sql, resultSetType, resultSetConcurrency);
    }

    /**
     * 返回连接
     *
     * @return Connection 连接
     */
    public Connection getConnection() {
        return conn;
    }

    /**
     * PreparedStatement
     *
     * @return sql 预设SQL语句
     */
    public void prepareStatement(String sql) throws SQLException {
        prepstmt = conn.prepareStatement(sql);
    }

    public void prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
            throws SQLException {
        prepstmt = conn.prepareStatement(sql, resultSetType, resultSetConcurrency);
    }

    /**
     * 设置对应值
     *
     * @param index 参数索引
     * @param value 对应值
     */
    public void setString(int index, String value) throws SQLException {
        prepstmt.setString(index, value);
    }

    public void setInt(int index, int value) throws SQLException {
        prepstmt.setInt(index, value);
    }

    public void setBoolean(int index, boolean value) throws SQLException {
        prepstmt.setBoolean(index, value);
    }

    public void setDate(int index, Date value) throws SQLException {
        prepstmt.setDate(index, value);
    }

    public void setLong(int index, long value) throws SQLException {
        prepstmt.setLong(index, value);
    }

    public void setFloat(int index, float value) throws SQLException {
        prepstmt.setFloat(index, value);
    }

    public void setBytes(int index, byte[] value) throws SQLException {
        prepstmt.setBytes(index, value);
    }

    public void setTimestamp(int index, Timestamp value) throws SQLException {
        prepstmt.setTimestamp(index, value);
    }


    public void clearParameters()
            throws SQLException {
        prepstmt.clearParameters();
        prepstmt = null;
    }

    /**
     * 返回预设状态
     */
    public PreparedStatement getPreparedStatement() {
        return prepstmt;
    }

    /**
     * 返回状态
     *
     * @return Statement 状态
     */
    public Statement getStatement() {
        return stmt;
    }

    /**
     * 执行SQL语句返回字段集
     *
     * @param sql SQL语句
     * @return ResultSet 字段集
     */
    public ResultSet executeQuery(String sql) throws SQLException {
        if (stmt != null) {
            return stmt.executeQuery(sql);
        } else return null;
    }

    public ResultSet executeQuery() throws SQLException {
        if (prepstmt != null) {
            return prepstmt.executeQuery();
        } else return null;
    }

    /**
     * 执行SQL语句
     *
     * @param sql SQL语句
     */
    public void executeUpdate(String sql) throws SQLException {
        if (stmt != null)
            stmt.executeUpdate(sql);
    }

    public void executeUpdate() throws SQLException {
        if (prepstmt != null)
            prepstmt.executeUpdate();
    }

    /**
     * 关闭连接
     */
    public void close() throws Exception {
        if (stmt != null) {
            stmt.close();
            stmt = null;
        }
        if (prepstmt != null) {
            prepstmt.close();
            prepstmt = null;
		}
		if (conn!=null)
		{
            conn.close();
			//dcm.freeConnection("mysql",conn);

		}

	}


}